<?php

class Produto {
    private $id;
    private $idColecao;
    private $nome;
    private $preco;
    private $dataInclusao;
    private $codigo;
    private $volume;
    private $descricao;
    private $uso;
    

    const NOME_MODULO = "Produto";

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNome() {
        return $this->nome;
    }
 
    public function setNome($nome) {
        $this->nome = $nome;
    }

    public function getPreco() {
        return $this->preco;
    }

    public function setPreco($preco) {
        $this->preco = $preco;
    }

    public function getIdColecao() {
        return $this->idColecao;
    }

    public function setIdColecao($idColecao) {
        $this->idColecao = $idColecao;
    }

    public function getDataInclusao() {
        return $this->dataInclusao;
    }

    public function setDataInclusao($dataInclusao) {
        $this->dataInclusao = $dataInclusao;
    }

    public function getCodigo() {
        return $this->codigo;
    }

    public function setCodigo($codigo) {
        $this->codigo = $codigo;
    }

    public function getVolume() {
        return $this->volume;
    }

    public function setVolume($volume) {
        $this->volume = $volume;
    }

    public function getDescricao() {
        return $this->descricao;
    }

    public function setDescricao($descricao) {
        $this->descricao = $descricao;
    }

    public function getUso() {
        return $this->uso;
    }

    public function setUso($uso) {
        $this->uso = $uso;
    }

            
    
    public static function listar(){
        $conn = Connection::getConnection();
        $produtos = array();
        
        $rs = $conn->query("SELECT * FROM produto");
        //$rs->execute();
        while($linha = $rs->fetch_assoc()){
            $produtos[] = self::arrayParaProduto($linha);
        }
        return $produtos;
    }
    
    public static function listarPorColecao($idColecao){
        $conn = Connection::getConnection();
        $produtos = array();
        
        $rs = $conn->query("SELECT * FROM produto WHERE idColecao = $idColecao");
        while($linha = $rs->fetch_assoc()){
            $produtos[] = self::arrayParaProduto($linha);
        }
        return $produtos;
    }
    
    public static function listarProdutosQuestionario($necessidade, $necessidade2){
        $conn = Connection::getConnection();
        $produtos = array();
        
        $query = "SELECT DISTINCT p.idProduto, p.nome, p.preco, p.dt_inclusao, p.codigo, p.volume, p.descricao, p.uso
                            FROM colecao_necessidade cn, colecao c, produto p
                            WHERE cn.idColecao = c.idColecao
                              AND c.idColecao = p.idColecao
                              AND cn.idNecessidade = $necessidade ";
         
        if($necessidade2 != ""){
            $query .= "AND cn.idNecessidade2 = $necessidade2";            
        }
       
        $rs = $conn->query($query);
        while($linha = $rs->fetch_assoc()){
            $produtos[] = self::arrayParaProduto($linha);
        }
        return $produtos;
    }
    
    public function inserir(){
            $dataInclusaoFormatoBanco = Util::dataViewParaBanco($this->dataInclusao);
            $conn = Connection::getConnection();
            
            
            $rs = $conn->prepare("INSERT INTO produto SET idColecao = ?, nome = ?, preco = ?, dt_inclusao = ?, 
                                    codigo = ?, volume = ?, descricao = ?, uso = ?");
	    $rs->bind_param("isdsidss", 
                            $this->idColecao, 
                            $this->nome, 
                            $this->preco,
                            $dataInclusaoFormatoBanco, 
                            $this->codigo, 
                            $this->volume, 
                            $this->descricao, 
                            $this->uso);
             //var_dump($rs);die;
              return $rs->execute();       
            
    }
     public function alterar(){
            $dataInclusaoFormatoBanco = Util::dataViewParaBanco($this->dataInclusao);
            $conn = Connection::getConnection();

            $rs = $conn->prepare("UPDATE produto SET idColecao = ?, nome = ?, preco = ?, dt_inclusao = ?, 
                                    codigo = ?, volume = ?, descricao = ?, uso = ?  WHERE idProduto = ?");
            $rs->bind_param("isdsidssi", 
                            $this->idColecao, 
                            $this->nome, 
                            $this->preco,
                            $dataInclusaoFormatoBanco, 
                            $this->codigo, 
                            $this->volume, 
                            $this->descricao, 
                            $this->uso,
                            $this->id);
            return $rs->execute();
    }
    public function excluir($id){
            $conn = Connection::getConnection();

            $rs = $conn->prepare("DELETE FROM produto  WHERE idProduto= ?");
            $rs->bind_param("d", $id);
            
            return $rs->execute();

    }
    
    /**
     * Retorna um Produto
     * @param int id
     * @return Produto
     */
    public static function consultar($id){
        $produto = null;
        $conn = Connection::getConnection();
        
        $rs = $conn->query("SELECT * FROM produto WHERE idProduto = $id");
        
        $linha = $rs->fetch_assoc();
        //se foi encontrado o registro
        if($linha){
           $produto = self::arrayParaProduto($linha);
        }
        return $produto;
    }
    
    
    
    /**
     * Tranforma a linha de uma consulta na tabela produto em um objeto Produto
     * @param type $linha linha de uma consulta da tabela produto
     */
    public static function arrayParaProduto($linha){
        $produto = new Produto();
        $produto->id = isset($linha["idProduto"]) ? $linha["idProduto"] : null;
        $produto->idColecao = isset($linha["idColecao"]) ? $linha["idColecao"]: null;
        $produto->nome = isset($linha["nome"]) ? $linha["nome"]: null;
        $produto->preco = isset($linha["preco"]) ? $linha["preco"]: null;
        $produto->dataInclusao = isset($linha["dt_inclusao"]) ? $linha["dt_inclusao"]: null;
        $produto->codigo = isset($linha["codigo"]) ? $linha["codigo"]: null;
        $produto->volume = isset($linha["volume"]) ? $linha["volume"]: null;
        $produto->descricao = isset($linha["descricao"]) ? $linha["descricao"]: null;
        $produto->uso = isset($linha["uso"]) ? $linha["uso"]: null;
        return $produto;
    }
    
    
    public static function listaProdutoPorNome($nomeProduto, $pesquisaExata = false) {
        $produtos = array();
        $conn = Connection::getConnection();
        if($pesquisaExata == true){        
            $rs = $conn->query("SELECT * FROM produto WHERE nome = '$nomeProduto' ORDER BY nome ASC");
        } else {
            $rs = $conn->query("SELECT * FROM produto WHERE nome LIKE '$nomeProduto%' ORDER BY nome ASC");
        }
        while($linha = $rs->fetch_assoc()){
            $produtos[] = self::arrayParaProduto($linha);
        }
        return $produtos;

    }

    
}
/* TODO testes, retirar isto daqui depois */
           // require_once '../config.php';

         //   var_dump(Produto::listar());
?>
